# ***********************
# COPYRIGHT siliang
# 四川农信开发三科
# 时间 2023年5月11日00:22:42
# ***********************
# 构建应用的镜像(使用该镜像的环境来构建项目为jar包或者war包等)
# 重点: (带BUILDER的FROM指用该环境进行编译，但是不是部署到该环境，只是借用)
FROM hub.ant.dev.cloud.scrcu.com/sofa/sofaboot-onbuild:2.0_java8_p1 AS BUILDER
MAINTAINER Siliang Liu
# build的命令，-sk=true表示skip test； -an用于指定应用的名字来指定需要运行的jar包（可以为空）。
# APPNAME是定义在BUILDER镜像中的ONBUILD ARG，需要在docker build时通过--build-arg指定。
# -sfp用于指定mvn 执行时的settings文件路径，/home/admin/app是代码checkout存放的路径。
# -dp=true用于表明是否需要deploy jar包到Remote Repository。

# 当前路径为/home/admin/app
# 使用RUN指令都会在当前镜像最顶层生成新的层，并提交到执行结果。
# Dockerfile中的后续步骤可以使用提交的结果。由于每次使用RUN指令都会生成新的层，
# 所以建议多个Shell在同一个RUN指令中声明
# 使用ant编译java项目，确保当前项目目录有build.xml
# RUN ant jar
# 使用maven编译java项目
# RUN /home/admin/buildscripts/sofaboot-build -sk=true -sfp=/home/admin/app/settings.xml
# 也可以使用云上sofa编译脚本编译java项目，本质上还是基于maven编译，但对服务器做了配置
RUN /home/admin/buildscripts/sofaboot-build -sk=true -sfp=/home/admin/app/settings.xml

# 应用的运行时镜像
From hub.ant.dev.cloud.scrcu.com/sofa/sofaboot-runtime:3.0_java8_ldc

# 将BUILDER中打出的包copy到运行时镜像相应的runtime目录(不要修改)
COPY --from=BUILDER /home/admin/release/run/*.jar /home/admin/release/run/

# 安装时区工具并配置时区信息
ENV TIME_ZONE Asia/Shanghai
ENV TZ Asia/Shanghai

# 设置JVM参数，根据应用实际情况修改
ENV JAVA_OPTS="\
-server \
-Xmx1g \
-Xms1g \
-Xmn1g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:/home/admin/logs/gc.log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/home/admin/logs/heapdump.hprof \
-Xss256k \
"

# 设置镜像目录
WORKDIR /home/admin/logs/

# 暴露端口，如8080、8008等，实际云平台k8s对该功能做了限制
EXPOSE 8080 8008

# 云平台默认启动方式如下
CMD ["/bin/bash" , "-c" , "/home/admin/scripts/sofaboot-entry.sh"]

# 也可自己写启动脚本，再在后面加上tail -f 防止容器消亡
#ENTRYPOINT sh /home/admin/app/scripts/start.sh;tail -f /dev/null
